Amazon Linux 2023 서버에 리눅스 유저 추가하기

Amazon Linux 2023 서버에 리눅스 유저 추가하기

Clock Icon2024.07.12

안녕하세요.
이번 블로그에서는 Amazon Linux 2023 서버에 리눅스 유저를 추가해보겠습니다.

인스턴스의 생성

먼저 작업을 위해 서버를 작성합니다.

  • 인스턴스 이름: add-user
  • OS: Amazon Linux 2023
  • 인스턴스 유형: t2.micro
  • 키페어: add-user
  • 세큐리티 그룹
    • 유형-SSH, port-22, 소스-내IP
  • 네트워크 설정: (생략)

1. 리눅스 유저 (키페어)

먼저 키페어를 사용해서 로그인할 수 있는 리눅스 유저를 생성해보겠습니다.
해당 작업은 다음 페이지를 참고했습니다.
https://docs.aws.amazon.com/ko_kr/AWSEC2/latest/UserGuide/managing-users.html

키페어의 생성

먼저 추가할 유저를 위한 키페어를 생성합니다.

  • 키페어 이름: add2-user
  • 키페어 타입: RSA
  • 프라이빗 키 파일 형식: .pem

키페어의 퍼블릭키 취득하기

키페어를 생성했으면 프라이빗키가 다운로드 되었을 겁니다.
그 프라이빗키를 사용해서 퍼블릭 키를 취득합니다.

퍼블릭키 취득
# 프라이빗키의 파일 접근 권한 설정
> chmod 400 [키페어 경로]/add2-user.pem

# 퍼블릭키 취득
> ssh-keygen -y -f [키페어 경로]/add2-user.pem
# (퍼블릭키의 일부분은 x로 대체)
ssh-rsa AAAAB3Nzaxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

인스턴스에 로그인

먼저 인스턴스에 로그인합니다.

인스턴스에 접속
> ssh -i [키페어 경로]/add-user.pem ec2-user@xx.xx.xx.xx
   ,     #_
   ~\_  ####_        Amazon Linux 2023
  ~~  \_#####\
  ~~     \###|
  ~~       \#/ ___   https://aws.amazon.com/linux/amazon-linux-2023
   ~~       V~' '->
    ~~~         /
      ~~._.   _/
         _/ _/
       _/m/'
[ec2-user@ip-yy-yy-yy-yy ~]$

리눅스 유저 생성

새로운 유저를 생성합니다.

유저 생성
$ sudo adduser newuser

그 후에 생성한 유저로 로그인해서 키페어(퍼블릭키)를 설정합니다.

유저 생성
[ec2-user@ip-yy-yy-yy-yy ~]$ sudo su - newuser
# 로그인하게 되면 다음과 같이 앞의 이름이 변경됩니다. ec2-user -> newuser
[newuser@ip-yy-yy-yy-yy ~]$

# SSH 키 파일에 대한 폴터를 생성 및 권한 설정을 합니다.
[newuser@ip-yy-yy-yy-yy ~]$ mkdir .ssh
[newuser@ip-yy-yy-yy-yy ~]$ chmod 700 .ssh

[newuser@ip-yy-yy-yy-yy ~]$ touch .ssh/authorized_keys
[newuser@ip-yy-yy-yy-yy ~]$ chmod 600 .ssh/authorized_keys

# .ssh/authorized_keys 파일에 퍼블릭키를 저장합니다.
[newuser@ip-yy-yy-yy-yy ~]$ vim .ssh/authorized_keys
# 내용 입력 후 저장 방법: esc -> :wq 입력 후 엔터

# 저장 내용 확인
[newuser@ip-yy-yy-yy-yy ~]$ cat .ssh/authorized_keys
ssh-rsa AAAAB3Nzaxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

생성 확인 및 접속 테스트

로그인 확인을 해보겠습니다.
ec2-user로 로그인한 인스턴스에서 로그아웃(exit)한 후에 newuser로 다시 로그인해보면 성공적으로 로그인되는 걸 확인할 수 있습니다.

newuser로 로그인
> ssh -i [키페어 경로]/add2-user.pem newuser@xx-xx-xx-xx
   ,     #_
   ~\_  ####_        Amazon Linux 2023
  ~~  \_#####\
  ~~     \###|
  ~~       \#/ ___   https://aws.amazon.com/linux/amazon-linux-2023
   ~~       V~' '->
    ~~~         /
      ~~._.   _/
         _/ _/
       _/m/'
Last login: Mon Jul  8 08:39:38 2024
[newuser@ip-yy-yy-yy-yy ~]$ 

다음 명령어를 통해 리눅스에서 생성하고 있는 유저도 확인할 수있습니다.
블로그에서 생성한 newuser도 추가되어 있습니다.

생성한 유저 확인 (/bin/bash 인 유저만 확인)
[newuser@ip-yy-yy-yy-yy ~]$ grep /bin/bash /etc/passwd
root:x:0:0:root:/root:/bin/bash
ec2-user:x:1000:1000:EC2 Default User:/home/ec2-user:/bin/bash
newuser:x:1001:1001::/home/newuser:/bin/bash

2. 리눅스 유저 (비밀번호)

이번에는 키페어가 아니라 비밀번호로 입력해서 로그인하도록 하는 유저로 작성을 해보겠습니다.

인스턴스에 로그인

먼저 인스턴스에 로그인합니다.

인스턴스에 접속
> ssh -i [키페어 경로]/add-user.pem ec2-user@xx.xx.xx.xx
   ,     #_
   ~\_  ####_        Amazon Linux 2023
  ~~  \_#####\
  ~~     \###|
  ~~       \#/ ___   https://aws.amazon.com/linux/amazon-linux-2023
   ~~       V~' '->
    ~~~         /
      ~~._.   _/
         _/ _/
       _/m/'
[ec2-user@ip-yy-yy-yy-yy ~]$

리눅스 유저 생성

먼저 유저를 생성하고 비밀번호를 설정합니다.

유저 생성
# 유저 생성
$ sudo adduser newuser2

# 비밀번호 설정
$ sudo passwd newuser2
Changing password for user newuser2.
New password: (비밀번호 입력)
Retype new password: (비밀번호 한 번 더 입력)
passwd: all authentication tokens updated successfully.

로그아웃하고 로그인을 해보면 에러가 발생합니다.
비밀번호 설정까지 했지만 이것만으로는 아직 사용할 수 없습니다.

- 설정 변경 전에 접속해보면
> ssh newuser2@xx.xx.xx.xx
# 에러 발생
newuser2@xx.xx.xx.xx: Permission denied (publickey,gssapi-keyex,gssapi-with-mic).

그렇기 때문에 인스턴스에서 PasswordAuthentication 설정을 변경해겠습니다.
다시 ec2-user 유저로 인스턴스에 로그인합니다.

PasswordAuthentication 설정 변경
$ sudo vi /etc/ssh/sshd_config
# PasswordAuthentication no -> yes 로 변경

# 설정 적용을 위해 sshd 재기동
$ sudo systemctl restart sshd

이걸로 비밀번호 입력을 통해서도 리눅스에 접속할 수 있도록 설정했습니다.

생성 확인 및 접속 테스트

이제 모든 설정이 끝났으니 접속테스트를 해보겠습니다.
인스턴스에서 로그아웃하고 newuser2로 SSH접속을 합니다.

접속 테스트
> ssh newuser2@xx.xx.xx.xx
newuser2@xx.xx.xx.xx's password: (비밀번호 입력)
   ,     #_
   ~\_  ####_        Amazon Linux 2023
  ~~  \_#####\
  ~~     \###|
  ~~       \#/ ___   https://aws.amazon.com/linux/amazon-linux-2023
   ~~       V~' '->
    ~~~         /
      ~~._.   _/
         _/ _/
       _/m/'
[newuser2@ip-yy-yy-yy-yy ~]$

이번에도 리눅스 유저를 확인해보면 아까와 달리 newuser2가 추가된 것을 확인할 수 있습니다.

생성한 유저 확인 (/bin/bash 인 유저만 확인)
[newuser@ip-yy-yy-yy-yy ~]$ grep /bin/bash /etc/passwd
root:x:0:0:root:/root:/bin/bash
ec2-user:x:1000:1000:EC2 Default User:/home/ec2-user:/bin/bash
newuser:x:1001:1001::/home/newuser:/bin/bash
newuser2:x:1002:1002::/home/newuser2:/bin/bash

번외1) 필요없어진 유저 삭제

이번에는 필요 없어진 유저를 삭제해보겠습니다.
명령어를 실행하고 현재 유저를 확인해보면 성공적으로 삭제 되어있습니다.

리눅스 유저 삭제
# 삭제하는 유저 이름: newuser
$ sudo userdel -r newuser

# 유저 확인
$ grep /bin/bash /etc/passwd
root:x:0:0:root:/root:/bin/bash
ec2-user:x:1000:1000:EC2 Default User:/home/ec2-user:/bin/bash
newuser2:x:1002:1002::/home/newuser2:/bin/bash

번외2) 생성한 유저에서 sudo 기능 사용할 수 있게 설정하기

위에서 만든 유저 (newuser, newuser2) 에서는 sudo 기능을 사용할 수 없습니다.

예를 들어 ec2-user에서는 sudo 를 사용할 수 있기 때문에 root 유저 계정으로 전환하는 명령어가 잘 실행됩니다.

sudo 실행(ec2-user)
[ec2-user@ip-yy-yy-yy-yy ~]$ sudo -i
[root@ip-yy-yy-yy-yy ~]#

하지만 newuser2 로 실행하면 다음과 같이 비밀번호 입력칸이 나오고, 입력을 하면 다음과 같이 sudoers 파일에 newuser2 유저가 없다라는 결과가 출력됩니다.
이 결과를 통해 sudo 를 사용하려면 sudoers 파일에 유저를 등록해야 한다는 걸 알 수 있습니다.

sudo 실행(newuser2)
[newuser2@ip-yy-yy-yy-yy ~]$ sudo -i

We trust you have received the usual lecture from the local System
Administrator. It usually boils down to these three things:

    #1) Respect the privacy of others.
    #2) Think before you type.
    #3) With great power comes great responsibility.

For security reasons, the password you type will not be visible.

[sudo] password for newuser2: (비밀번호 입력)
newuser2 is not in the sudoers file.

sudo 파일 수정

그러면 실제로 /etc/sudoers 파일에 유저를 등록해보겠습니다.

/etc/sudoers 파일 수정
# 이 작업은 sudo 권한을 가지고 있는 유저만 할 수 있으니 ec2-user에서 실행합니다.
$ sudo visudo

# 일부 내용 발췌
##########  (⭐️⭐️ 사이에 있는 내용을 추가하고 저장합니다.)
...
## Allow root to run any commands anywhere
root    ALL=(ALL)       ALL
⭐️⭐️newuser2    ALL=(ALL)       ALL⭐️⭐️

## Allows members of the 'sys' group to run networking, software,
## service management apps and more.
# %sys ALL = NETWORKING, SOFTWARE, SERVICES, STORAGE, DELEGATING, PROCESSES, LO>

## Allows people in group wheel to run all commands
%wheel  ALL=(ALL)       ALL

## Same thing without a password
# %wheel        ALL=(ALL)       NOPASSWD: ALL
...
##########

# /etc/sudoers 파일 저장 방법 헷갈릴때는 ↓ 참고
</etc/sudoers 파일 변경 할 때 순서>

Ctrl + X 눌러서 Y 입력
02

파일 이름이 /etc/sudoers.tmp/etc/sudoers 로 변경 후에 엔터
03

Y 입력
04

Y 입력을 하면 저장 완료!
p5

파일 저장 끝나고 확인을 해보면 다음과 같이 root 유저로 전환이 잘 되게 됩니다.

sudo 명령어 테스트
[newuser2@ip-yy-yy-yy-yy ~]$ sudo -i
[sudo] password for newuser2: (비밀번호 입력)
[root@ip-yy-yy-yy-yy ~]#

wheel 그룹에 넣기

아니면 파일을 수정할 필요도 없이 사용자 그룹에 넣는 방법도 있습니다.
이미 ec2-user 유저가 포함되어 있는 사용자 그룹 wheel 이 있기 때문에 newuser2wheel 에 넣어서 sudo 사용가능하게 설정해보겠습니다.

먼저 어떻게 설정되어 있는지 확인해겠습니다.

사용자 그룹 확인 (변경 전)
# 유저가 소속되어 있는 그룹 확인
$ groups ec2-user
ec2-user : ec2-user adm wheel systemd-journal

$ groups newuser2
newuser2 : newuser2

# 반대로 사용자 그룹에 포함되어 있는 사용자 확인
$ getent group wheel
wheel:x:10:ec2-user

wheel 그룹에는 ec2-user만 들어가 있습니다.
newuser2를 넣어보겠습니다.

리눅스 유저에 그룹 설정
$ sudo usermod -aG wheel newuser2

이제 다시 한 번 확인 해보면 newuser2wheel 그룹에 포함되었습니다.

사용자 그룹 확인 (변경 후)
# 유저가 들어가 있는 그룹 확인
$ groups newuser2
newuser2 : newuser2 wheel

# wheel 그룹에 들어가 있는 유저 확인
$ getent group wheel
wheel:x:10:ec2-user,newuser2

그럼 확인해보겠습니다.

sudo 명령어 테스트
# 실행 전에 한번 로그아웃(exit) 하고 다시 로그인해주세요 (변경 적용을 위해)
[newuser2@ip-yy-yy-yy-yy ~]$ sudo -i
[sudo] password for newuser2: (비밀번호 입력)
[root@ip-yy-yy-yy-yy ~]#

+ root 전환할 때 비밀번호 입력하고 싶지 않다면

여기까지 되었으면 sudo 명령어를 문제 없이 사용할 수 있게 되었습니다.
근데 newuser2root 유저로 전환할 때마다 비밀번호를 입력해야 되는게 귀찮으신가요?

[sudo] password for newuser2:

그러면 이번에 비밀번호 입력없이 바로 전환되도록 해보겠습니다.

/etc/sudoers 파일 수정
$ sudo visudo

# 일부 내용 발췌
########## (⭐️⭐️ 사이에 있는 내용을 추가하고 저장합니다.)
...
## Allow root to run any commands anywhere
root    ALL=(ALL)       ALL

## Allows members of the 'sys' group to run networking, software,
## service management apps and more.
# %sys ALL = NETWORKING, SOFTWARE, SERVICES, STORAGE, DELEGATING, PROCESSES, LO>

## Allows people in group wheel to run all commands
%wheel  ALL=(ALL)       ALL

## Same thing without a password
# %wheel        ALL=(ALL)       NOPASSWD: ALL
⭐️⭐️newuser2    ALL=(ALL)    NOPASSWD: ALL⭐️⭐️
...
##########

다시 테스트 해보면 비밀번호 입력하라는 게 사라지고 바로 root로 전환이 되었습니다!

sudo 명령어 테스트
[newuser2@ip-yy-yy-yy-yy ~]$ sudo -i
[root@ip-yy-yy-yy-yy ~]#

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.